package org.yzhzc.friend.domain.question.es;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.time.LocalDateTime;

/**
 * 题目 Elasticsearch 文档类。
 * 用于表示题目的索引结构，定义了题目的字段及其在 Elasticsearch 中的映射关系。
 */
@Data // 自动生成 getter、setter、toString 等方法
@Document(indexName = "idx_question") // 指定 Elasticsearch 索引名称
public class QuestionES {

    @Id // 标记为主键字段
    @Field(type = FieldType.Long)   // 字段类型为 Long
    private Long questionId;        // 题目ID

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word") // 字段类型为 Text，使用 ik_max_word 分词器
    private String title; // 题目标题

    @Field(type = FieldType.Byte)   // 字段类型为 Byte
    private Integer difficulty;     // 题目难度

    @Field(type = FieldType.Long)   // 字段类型为 Long
    private Long timeLimit;         // 时间限制（单位：毫秒）

    @Field(type = FieldType.Long)   // 字段类型为 Long
    private Long spaceLimit;        // 空间限制（单位：MB）

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word") // 字段类型为 Text，使用 ik_max_word 分词器
    private String content; // 题目内容

    @Field(type = FieldType.Text)   // 字段类型为 Text
    private String questionCase;    // 题目测试用例

    @Field(type = FieldType.Text)   // 字段类型为 Text
    private String mainFuc;         // 题目主函数

    @Field(type = FieldType.Text)   // 字段类型为 Text
    private String defaultCode;     // 题目默认代码

    @Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second) // 字段类型为 Date，格式为 yyyy-MM-dd HH:mm:ss
    private LocalDateTime createTime; // 题目创建时间
}
